Android源码学习笔记1-短信发送流程分析

本文详细分析了Android 4.4中MMS应用程序的短信发送流程,从ComposeMessageActivity启动,WorkingMessage处理,到SmsMessageSender按收信人拆分信息,SmsReceiverService的处理,以及SmsSingleRecipientSender的发送操作。文章涵盖了从用户界面到发送服务的整个流程,并解释了每个关键步骤的作用。
摘要由CSDN通过智能技术生成

环境:Macbook pro (2.6 GHz Inter Core i5),操作系统为OS X 10.9.2。


一、准备工作

1.1、android4.4源码编译

下载android4.4源码,编译通过,模拟器正常启动运行。详细步骤网上有很多教程,可参见http://blog.csdn.net/szzhaom/article/details/21462329

1.2、开发环境搭建

Android SDK下载地址:http://developer.android.com/sdk/index.html。本人下载的版本为:adt-bundle-mac-x86_64-20131030,此包自带eclipse,并集成了ADT插件、Android SDK Tools及Android Platform-tools,下载解包后即可开发Android应用,推荐使用。

1.3、相关概念

  • Thread对话 ——是指用户与某个联系人或某几个联系人之间的一系列信息交互。在Mms中,用Thread Id来标识和管理对话,Thread Id也即在数据库表threads中的_id。
  • Conversation ——是用来管理Thread对话的,Conversation是一个Thread对话的抽象出来数据结构,它能够从数据 库中查询,删除一个对话中的消息等,每一个Conversation有一个唯一的Thread Id。同时它也负责管理一些所有对话的功能,比如查询所有对话,删除所有对话等。Conversation更多时候是充当当前对话的角色,比如在新建信息时,编辑信息时,或是查看某个对话时,都会有一个 Conversation对象存在,以代表当前信息所处的对话。它是一个近似单键,都是通过Conversation的静态方法来获得 Conversation对象,有一些其他的方法也是静态的。
  • ConversationList ——负责显示和编辑所有的对话,以列表形式显示所有的Thread,每一项代表一个Thread,通常也会显示这个Thread的状态,如有无草稿,信息发送/接收是否成功等。
  • Message ——消息,泛指短信SMS和彩信MMS。因为不再区分短信和彩信,在对话列表,草稿管理和信息列表中它们都是一样的,都是信息。 Message的数据结构是MessageItem,它是一个纯数据结构,里面存储着关于一个信息的所有数据,还有MessageListitem,它是一个View,专门用于在消息列表中显示一个信息,里面的数据都是从MessageItem获取。它们统一都被 ComposeMessageActivity,MessageListAdapter和MessageListView来管理。
  • WorkingMessage ——当前消息,它是专门用于代表当前正在创建和编辑的信息的数据结构无论是短信还是彩信,在创建和编辑的时候都放在一个WorkingMessage对象里面。这个对象也负责信息的发送,存储和存储为草稿。
  • Slideshow ——在Mms应用里面,彩信是以Slideshow幻灯片的形式来展示的。一个彩信可以有多张幻灯片,每张幻灯片上面可以有图片,文字,音频和视频,可以设置每张幻灯片的浏览时长,布局等,这里的幻灯片与Office中的PowerPoint有几分类似。幻灯片的数目限制是以彩 信允许的附件大小为上限,这个也与每张幻灯片上面的媒体大小有关。可以这样讲MMS就是以幻灯片形式存在的,创建的时候是一张一张的编辑,收到的彩信或编辑完后,就可以一张张的放映浏览幻灯片。
  • Recipient ——接受人,这里是指信息的接收者,要么是一个陌生的电话号码,要么是一个陌生的电子邮件地址(彩信时),要么就是联系人数据库中的联系人。彩信和短信对接收人的数量都有限制,这个也是在Mms的Settings时面可以更改的。每一条信息要想发送成功,必须保证接收人是一个合法的联系人,合法也是不同的手机有不同的定义,但通常来讲,要么与联系人数据库中的某个联系人匹配,要么是一个电话号码,要么是一个电子邮件地址,其他情况则视为不合法,对于有不合法接收人的信息,不会进行发送。管理联系人的数据结构是Contact和ContactList,其中ContactList是一个以Contact为元素的ArrayList。Contact不但存储有联系人的一些信息,如名字,电话号码等,它还能与联系人数据库进行同步,也就是它能保证它是一个合法的联络人,并在数据库中存在。在信息发送前会先进行一次联系人同步,以保证已有的联系人是正确的。

二、MMS源码目录结构分析

2.1、导入MMS源码

启动eclipse,新建java工程,导入android源码,如下图:


2.2、MMS包关系图

Android4.4版本的MMS模块有11个包,其关系图如下:





com.android.mms.ui  —— GUI展示层,用于展示对话列表,消息列表,消息编辑页,彩信附件编辑,彩信展示,播放幻灯片。负责直接与用户交互。
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值